package leetcode.leetcode819;

import java.util.*;

/**
 * @author czt
 * @version 1.0
 * @since 2025/1/7
 *
 * 最常见的单词
 */
public class Leetcode819 {

    /**
     * 返回最多的单词
     * @param paragraph 单词串
     * @param banned 禁用的单词
     * @return 返回最多的单词
     * 1.将paragraph切割为一个个单词
     * 2.将单词加入map，单词作为key，出现次数作为value，同时禁用词不加入
     * 3.在map集合中找到value最大的，返回它对应的key即可
     */
    public String mostCommonWord(String paragraph, String[] banned) {
        String[] split = paragraph.toLowerCase().split("[^A-Za-z]+");
        HashSet<String> set = new HashSet<>(Arrays.asList(banned));
        HashMap<String, Integer> map = new HashMap<>();
        for (String key : split) {
            if (!set.contains(key)) {
                Integer value = map.get(key);
                if (value == null) {
                    value = 0;
                }
                map.put(key, value + 1);
            }
        }
        Optional<Map.Entry<String, Integer>> max = map.entrySet().stream().max(Map.Entry.comparingByValue());
        return max.map(Map.Entry::getKey).orElse(null);
    }
}
